<?php
/*
 * Copyright (c) 2011 Joao Paulo Cirino Silva de Novais <joaopaulonovais@gmail.com>
 *
 */

class VagaDAO extends DAO {

	static function inserir(Model $vaga) {
        
		try {
			
		    $conn = Conexao::obterConexao();
            $conn->beginTransaction();
            $sql = $conn->prepare("insert into tab_vaga (cod_tipo_profissional,
                                                         nom_empregador,
                                                         des_endereco,
                                                         des_cidade,
                                                         des_bairro,
                                                         sig_uf,
                                                         num_telefone,
                                                         des_email,
                                                         txt_observacao)
                                                 values (?,?,?,?,?,
                                                         ?,?,?,?)");
            $parametros = get_object_vars($vaga);

            $sql->execute($parametros);
	        
	        $cod_vaga = $conn->lastInsertId();
	            
	        foreach ($vaga->get("opt_perfil") as $cod_tipo_perfil) {
	
	            $sql = $conn->prepare("insert into tab_vaga_perfil (cod_vaga,
	                                                                cod_tipo_perfil)
	                                                        values (?,
	                                                                ?)");
	
	            $sql->execute(array($cod_vaga, $cod_tipo_perfil));
	        }
	
	        self::incluirSituacao($cod_vaga,'P'); //Vaga na situacao PENDENTE
	        
	        $conn->commit();
	        $conn = null;
		} catch (Exception $e) {
			$conn->rollback();
			$conn = null;
			print $e->getMessage();
		}

        return  $cod_vaga;
    }
    
    static function alterar(Model $vaga) {
    	
    	return null;
    	
    }
    
    static function remover(Model $vaga) {
    	
    	return null;
    	
    }

    static function consultar(Model $vaga) {
        try {
        	
	    	$conn = Conexao::obterConexao();
	
	        $str = "select v.*
	                  from tab_vaga v
	                left outer join tab_vaga_perfil p
	                  on v.cod_vaga = p.cod_vaga
	                where 1=1";
	        
	        $filtros = Array();
	        
	        if ($vaga->get("cod_vaga")) {
	            $str .= " and v.cod_vaga = ?";
	            $filtros[] = $vaga->get("cod_vaga");
	        }
	
	        if ($vaga->get("cod_tipo_profissional")) {
	            $str .= " and v.cod_tipo_profissional = ?";
	            $filtros[] = $vaga->get("cod_tipo_profissional");
	        }
	
	        if ($vaga->get("nom_empregador")) {
	            $str .= " and nom_empregador like ?";
	            $filtros[] = "%".$vaga->get("nom_empregador")."%";
	        }
	        
	        if ($vaga->get("des_endereco")) {
	            $str .= " and des_endereco like ?";
	            $filtros[] = "%".$vaga->get("des_endereco")."%";
	        }
	
	        if ($vaga->get("des_cidade")) {
	            $str .= " and des_cidade like ?";
	            $filtros[] = "%".$vaga->get("des_cidade")."%";
	        }
	
	        if ($vaga->get("des_bairro")) {
	            $str .= " and des_bairro like ?";
	            $filtros[] = "%".$vaga->get("des_bairro")."%";
	        }
	        
	        if ($vaga->get("sig_uf")) {
	            $str .= " and sig_uf = ?";
	            $filtros[] = $vaga->get("sig_uf");
	        }
	
	        if ($vaga->get("opt_perfil")) {
	        	$str .= " and p.cod_tipo_perfil in (?)";
	        	$filtros[] = implode(',', $vaga->get("opt_perfil"));
	        }
	        
	        $str .= " group by v.cod_vaga, nom_empregador, des_bairro 
	                  order by v.nom_empregador";
	
            $sql = $conn->prepare(trim($str));
	        
            if (empty($filtros)){
                $sql->execute();
            } else {
                $sql->execute($filtros);	
            }
            
            $conn = null;
            
            return $sql->fetchALL(PDO::FETCH_CLASS, "VagaModel");
	        
        } catch(PDOException $e) {
        	$conn = null;
        	echo $e->getMessage();
        }
    }
    
    static function consultarVaga(Model $vaga) {
        try {
        	
	    	$conn = Conexao::obterConexao();
	    	
	        $str = "select v.*
	                  from tab_vaga v
	                where v.cod_vaga = ?";

	        $sql = $conn->prepare(trim($str));

	        $sql->execute(array($vaga->get("cod_vaga")));
	        
	        $conn = null;
	        	        
	        return $sql->fetchObject("VagaModel");
        } catch(PDOException $e) {
        	$conn = null;
        	echo $e->getMessage();
        }
    }
    
    static function consultarPerfil(Model $vaga) {
        try {
        	
	    	$conn = Conexao::obterConexao();
	    	
	        $str = "select p.cod_vaga, p.cod_tipo_perfil, p.des_observacao, tp.des_tipo_perfil
	                  from tab_vaga_perfil p
	                     inner join tab_tipo_perfil tp
	                         on p.cod_tipo_perfil = tp.cod_tipo_perfil
	                where p.cod_vaga = ?";

	        $sql = $conn->prepare(trim($str));
	        
	        $sql->execute(array($vaga->get("cod_vaga")));
	        
	        $conn = null;
	        	        
	        return $sql->fetchObject("VagaPerfilModel");
        } catch(PDOException $e) {
        	$conn = null;
        	echo $e->getMessage();
        }
    }
    
    static function consultarSituacao($tip_situacao,
                                      $cod_tipo_profissional,
                                      $ind_atual,
                                      $reg_inicial,
                                      $qtd_registros) {
        try {
       	
	    	$conn = Conexao::obterConexao();
	    	
	        $str = "select v.*
	                  from tab_vaga v
	                     inner join tab_vaga_situacao vs
	                         on v.cod_vaga = vs.cod_vaga
	                where 1=1";
	        
            $filtros = Array();
            
            if($tip_situacao) {
            	$str .= " and vs.tip_situacao = ?";
            	$filtros[] = $tip_situacao;
            }
            
            if($cod_tipo_profissional) {
            	$str .= " and v.cod_tipo_profissional = ?";
            	$filtros[] = $cod_tipo_profissional;
            }
            
            if($ind_atual) {
            	$str .= " and vs.dat_situacao = (select max(dat_situacao)
            	                                   from tab_vaga_situacao x
            	                                 where x.cod_vaga = vs.cod_vaga)";
            }
            
            if($reg_inicial && $qtd_registros) {
            	$str .= " Limit = ?, ?";
            	$filtros[] = $reg_inicial;
            	$filtros[] = $qtd_registros;
            }
            
	        $sql = $conn->prepare(trim($str));
	        
	        $sql->execute($filtros);
        
	        $conn = null;
	
	        return $sql->fetchALL(PDO::FETCH_CLASS, "VagaModel");
        } catch(PDOException $e) {
        	$conn = null;
        	echo $e->getMessage();
        }
    }
    
    static function incluirSituacao($cod_vaga,$tip_situacao) {
        try {
       	
	    	$conn = Conexao::obterConexao();
            //A data esta no default da tabela
	    	$sql = $conn->prepare("insert into tab_vaga_situacao (cod_vaga,
	                                                              tip_situacao)
	                                                      values (?,
	                                                              ?)");
	    	
	        
	        $conn = null;
	
	        return $sql->execute(array($cod_vaga, "".$tip_situacao.""));
        } catch(PDOException $e) {
        	$conn = null;
        	echo $e->getMessage();
        }
    }
}

?>